package Exercise;


public class EX04_OOP {

	public static void main(String[] args) {

		Retangle r = new Retangle();
		r.width = 4;
		r.height = 40;
		r.color = "red";

		System.out.println(r.width);
		System.out.println(r.height);
		System.out.println(r.color);
		System.out.println(r.getArea());

		System.out.println("\n");

		Retangle r1 = new Retangle();
		r1.width = 3.5F;
		r1.height = 35.9F;
		r1.color = "orange";

		System.out.println(r1.width);
		System.out.println(r1.height);
		System.out.println(r1.color);
		System.out.println(r1.getPerimeter());
		System.out.println("\n");

		Fan f = new Fan();

		f.speed = f.FAST; // 최고속도
		f.on = true; // 동작중
		f.radius = 10;
		f.color = "yellow";

		System.out.println(f.speed);
		System.out.println(f.on);
		System.out.println(f.radius);
		System.out.println(f.color);
		System.out.println(f.showFanInfo());
		System.out.println("\n");

		Fan f1 = new Fan();
		f1.speed = f1.MEDIUM;
		f1.on = false;
		f1.radius = 5.0F;

		System.out.println(f1.speed);
		System.out.println(f1.on);
		System.out.println(f1.radius);
		System.out.println(f1.color);
		System.out.println(f1.showFanInfo());
		System.out.println("\n");

		Account a = new Account();
		a.balance = 20000;
		a.interestRate = 4.5F;
		a.dateCreated = "2013-11-06 13:15:45";

		System.out.println(a.interestRate);
		System.out.println(a.dateCreated);
		System.out.println(a.balance);
		System.out.println(a.withdraw(3500));
		System.out.println(a.getMonthlyInterestRate());
		System.out.println(a.deposit(6500));
		System.out.println("\n");
		
		Stock s = new Stock();
		s.sname = "경영기술";
		s.previousClosingPrice = 1000000;
		s.currentPrice = 750000;

		System.out.println(s.sname);
		System.out.println(s.previousClosingPrice);
		System.out.println(s.currentPrice);
		System.out.println("주가 변동률은" + s.getChangePercent()+ "%");

		/*
		 * 자릿수 구분 문자 _ 정수 리터럴이 너무 길면 가독성에 문제 있음 JDK 7에 새롭게 추가된 기능 중 하나는 3 자릿수 마다
		 * _를 사용할 수 있게 한 것
		 * 
		 * 클래스에 사용되는 변수의 종류 멤버 member 변수 ->class 블록내 선언한 변수 ->해당 클래스를 통해서만 사용
		 * 가능한 변수
		 * 
		 * 인스턴스 instance/object 변수 ->객체를 가리키는 변수를 의미 ->클래스와 new 연산자로 구성된 문장을
		 * 실행했을 때 의 결과물
		 */
		
		/* 생성자 constructor
		 * 생성자는 객체를 생성하는 데 사용하는
		 * 특별한 메서드
		 * 모든 클래스는 하나 이상의 생성자가 있어야 함
		 * 설령, 메서드를 작성하지 않았더라도 
		 * 컴파일러가 자동으로 만들어서 넣어줌
		 * 생성자는 일반 메서드와는 달리 
		 * void 나 return 을 사용하지 않음
		 * 생성자 이름은 클래스 이름과 동일해야 함
		 * 
		 * */

	} // main

} // class

/*
 * */
class Retangle {
	float width = 1.0F;
	float height = 1.0F;
	String color = "white";

	float getArea() {
		return (width * height);
	}

	float getPerimeter() {
		return (width * 2 + height * 2);
	}
}

class Fan {

	final int SLOW = 1;
	final int MEDIUM = 2;
	final int FAST = 3;
	int speed = SLOW;
	boolean on = false;
	float radius = 5.0F;
	String color = "blue";

	String showFanInfo() {
		String msg = "";
		if (on == true)
			msg = speed + "," + color + "," + radius + "," + "작동중";
		else
			msg = color + "," + radius + "," + "꺼져있음";
		return msg;
	}

	void showFanInfo2() {
		System.out.println(color);
		System.out.println(radius);
		System.out.println(on == false);
		System.out.println("꺼져있음");
	}

}

class Account {
	int aid = 0;
	int balance = 0;
	float interestRate = 0;
	String dateCreated;

	float getMonthlyInterestRate() {
		return interestRate / 12;
	}

	/*int withdraw(int gold) {
		System.out.println(balance - gold);
		return balance - gold;
	}
	
	call by value 로 인해 예금 금액이
  	제대로 차감되지 않음
	*/
	
	int withdraw(int gold){
		return (balance -= gold);
	}
	int deposit(int gold) {
		return (balance += gold);
	}

}

class Stock {
	String sname;
	int previousClosingPrice;
	int currentPrice;
	
	float getChangePercent(){
		return (1 - ((float)currentPrice / previousClosingPrice)) * 100;
	}

}